#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
 
ino_t get_inode(char *);
void printpathto(ino_t);
void inum_to_name(ino_t ,char *,int);
 
int main()
{
    printpathto(get_inode("."));
    printf("\n");
    return 0;
}
 
ino_t get_inode(char * filename)
{
    struct stat buffer;
    if(lstat(filename,&buffer) == -1)
    {
        perror("can't stat");
        exit(1);
    }
    return buffer.st_ino;
}
 
void printpathto(ino_t ino)
{
    ino_t ino_parent = get_inode("..");
    if(ino_parent == ino)
        return;
    else
    {
        struct stat s;
        char buffer[255];
        chdir("..");
        inum_to_name(ino,buffer,255);
        printpathto(ino_parent);
        printf("/%s",buffer);
    }
}
 
void inum_to_name(ino_t ino,char * buffer,int buffer_length)
{
    DIR * dir;
    struct dirent * direntp;
    struct stat stat_buffer;
    dir = opendir(".");
    if(dir == NULL)
    {
        perror("can't open dir .");
        exit(1);
    }
    while((direntp = readdir(dir)) != NULL)
    {
        lstat(direntp->d_name,&stat_buffer);
        if(stat_buffer.st_ino == ino)
        {
            strncpy(buffer,direntp->d_name,buffer_length);
            buffer[buffer_length-1] = '\0';
            closedir(dir);
            return;
        }
    }
}
